package program.utils;

import program.domain.PCB;

/**
 * @program: OSAlgorithms
 * @description: 队列
 * @author: W
 * @create: 2021-10-21 11:52
 **/

public class PCBQueue {
    /**
     * 队头
     */
    private PCB head;

    /**
     * 队尾
     */
    private PCB tail;

    /**
     * 队列元素个数
     */
    private int size;

    /**
     * 入队
     * @param pcb
     */
    public void add(PCB pcb) {
        if (head == null) {
            head = pcb;
        }else{
            tail.setNext(pcb);
        }
        tail = pcb;
        size++;
    }

    /**
     * 出队并移除队头元素
     * @return 队头元素
     */
    public PCB remove() {
        if (head!=null){
            PCB h = head;
            head = head.getNext();
            size--;
            h.setNext(null);
            return h;
        }
        return null;
    }

    /**
     * 查看队头元素
     * @return 队头元素
     */
    public PCB peek() {
        return head;
    }

    /**
     * 判断队列是否为空
     * @return
     */
    public boolean isEmpty(){
        return size==0;
    }

    /**
     * 获取当前队列元素个数
     * @return
     */
    public int getSize(){
        return size;
    }

}
